﻿using System.Collections.Generic;

namespace DKE_Kinect.Entwicklung.Grafik.ControlManaging
{
	/// <summary>
	/// Stellt ein Interface für die Eigenschaftstverwaltung eines Menüs dar.
	/// </summary>
	public interface IMenu<T>
	{
		// Properties
		/// <summary>
		/// Gibt an, welche Art der Aktion hinter dem Menüpunkt steckt.
		/// </summary>
		ActivationType ActivationType { get; }

		/// <summary>
		/// Gibt den Index dieses Menüpunktes gegenüber dem übergeordneten Menü an.
		/// </summary>
		int Index { get; }
		/// <summary>
		/// Gibt an, welcher Untermenüpunkt dieses Menüpunktes ausgewählt wurde oder legt diesen fest.
		/// </summary>
		int SelectedIndex { get; set; }
		/// <summary>
		/// Gibt an, welche Untermenüpunkt ausgeklappt wurde oder legt diesen fest.
		/// </summary>
		int CollapsedIndex { get; set; }

		/// <summary>
		/// Gibt an, ob dieser Menüpunkt der Knoten / Wurzel des Menübaumes ist.
		/// </summary>
		bool Root { get; }
		/// <summary>
		/// Gibt den übergeordneten Knoten dieses Menüpunktes an.
		/// </summary>
		IMenu<T> PreviousLayer { get; }
		/// <summary>
		/// Gibt alle untergeordneten Menüpunkte an.
		/// </summary>
		List<T> SubItems { get; }

		/// <summary>
		/// Gibt den ausgewählten Menüpunkt an.
		/// </summary>
		T SelectedItem { get; }

		/// <summary>
		/// Gibt den Text an, den dieser Menüpunkt darstellen soll oder legt diesen fest.
		/// </summary>
		string Text { get; set; }

		// Methods
		/// <summary>
		/// Selektiert diesen Menüpunkt.
		/// </summary>
		void Select ();
		/// <summary>
		/// Gibt den Wurzelknoten im Menübaum an.
		/// </summary>
		/// <returns></returns>
		IMenu<T> GetRoot ();
	}
}